
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.*;
import java.time.*;

public class EnergyImpl {

    private StringRedisTemplate stringRedisTemplate;


    /**
     * 获取每个 dbbh 的最新数据
     * @return 最新数据的 Map
     */
    public Map<String, String> getLatestDataForEachDbbh() {
        // 获取所有 ammeter:result:* 的键
        Set<String> keys = stringRedisTemplate.keys("ammeter:result:*");
        
        // 用于存储每个 dbbh 的最新数据
        Map<String, String> latestData = new HashMap<>();
        
        // 临时存储每个 dbbh 的所有日期键
        Map<String, List<String>> dbbhToDateKeys = new HashMap<>();
        
        // 遍历所有键，分类到每个 dbbh 下
        for (String key : keys) {
            // 解析键，得到 dbbh 和 date
            String[] parts = key.split(":");
            if (parts.length == 4) {
                String dbbh = parts[2];
                String dateStr = parts[3];
                
                // 将日期字符串转换为 LocalDateTime
                LocalDateTime dateTime = LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern("EEE MMM dd HH", Locale.US));
                
                // 将键按 dbbh 分类
                dbbhToDateKeys.computeIfAbsent(dbbh, k -> new ArrayList<>()).add(key);
            }
        }
        
        // 对每个 dbbh，找到最新的日期键并获取其值
        for (Map.Entry<String, List<String>> entry : dbbhToDateKeys.entrySet()) {
            String dbbh = entry.getKey();
            List<String> dateKeys = entry.getValue();
            
            // 按日期排序，找到最新的键
            dateKeys.sort(Comparator.comparing(s -> LocalDateTime.parse(s.split(":")[3], DateTimeFormatter.ofPattern("EEE MMM dd HH", Locale.US))));
            String latestKey = dateKeys.get(dateKeys.size() - 1);
            
            // 获取最新键的值
            String value = stringRedisTemplate.opsForValue().get(latestKey);
            latestData.put(dbbh, value);
        }
        
        return latestData;
    }

}